/*
 *
实现一个字符串类String，为其提供可接受C风格字符串的构造函数、析构函数、拷贝构造函数和拷贝赋值函数 。
Hello
Hello
World
chengaj
World

 */

#include <iostream>
#include <cstring>
using namespace std;

class String{
private:
	char *str;
public:
	//类型转换构造函数
	//接收C风格字符串的构造函数
	String(const char *str){
		this->str = new char[strlen(str) + 1];
		strcpy(this->str, str);
	}
	//拷贝构造函数
	String(const String &that){
		str = new char[strlen(that.str) + 1];
		strcpy(str, that.str);
	}
	//拷贝赋值函数
	String & operator=(const String & that){
		if(this != &that){
			//删除this对象原来的堆空间
			delete [] str;
			str = new char[strlen(that.str) + 1];
			strcpy(str, that.str);
		}
		return *this;
	}
	//析构函数
	~String(){
		delete [] str;
	}
	void print(){
		cout << str << endl;
	}
	const char * c_str(){
		return str;
	}

};

int main(void){

	String s1 = "Hello"; //类型转换构造函数
	s1.print();

	String s2 = s1; //拷贝构造函数
	s2.print();

	String s3 = "World";
	s2 = s3;  //拷贝赋值函数
	s2.print();

	const char *chr_str = "chengaj";
	String s5(chr_str);  //接收C风格字符串的构造函数
	s5.print();

	cout << s3.c_str() << endl;  //string::c_str

	return 0;
}
